//
//  SYLeftDrawerController.m
//  zhihuDaily
//
//  Created by yang on 16/2/24.
//  Copyright © 2016年 yang. All rights reserved.
//

#import "SYLeftDrawerController.h"

#import "SYLeftDrawerCell.h"
#import "MMHomeController.h"
#import "MMNavigationController.h"
#import <MJExtension/MJExtension.h>
#import <AFNetworking/AFNetworking.h>
#import "MMAppSettings.h"
@interface SYLeftDrawerController () <UITableViewDataSource, UITableViewDelegate>
@property (nonatomic, strong) NSMutableArray<SYTheme *> *themes;

@property (weak, nonatomic) IBOutlet UIView *profileView;
@property (weak, nonatomic) IBOutlet UIImageView *avatarImage;
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;

@property (weak, nonatomic) IBOutlet UIButton *offlineButton;
@property (weak, nonatomic) IBOutlet UIButton *dayNightButton;
@property (weak, nonatomic) IBOutlet UITableView *tableView;

@property (weak, nonatomic) IBOutlet UIView *bottomContainer;
@property (nonatomic, strong) MMNavigationController *naviTheme;

//@property (nonatomic, strong)  SYThemeController *themeController;

@end

@implementation SYLeftDrawerController


#pragma mark life cycle
- (void)viewDidLoad {
    [super viewDidLoad];
    White_StatusBar;
    [self setupSubviews];
    [self setupDataSource];
    //夜间模式实现方法（江哥和李博推荐的框架）：
    /*
     1.MMAppSettings（单例）通过用户偏好设置存取数据 （数据例如用户选了白天模式还是黑夜）
     2.使用第三方框架DKNightVersion，用法
     Checkout DKColorTable.txt file in your project, which locates in Pods/DKNightVersion/Resources/DKNightVersion.txt
     设置自己的DKColorTable.txt，添加颜色类和这个类对应的NORMAL状态颜色和NIGHT状态颜色
     NORMAL   NIGHT
     #ffffff  #343434 BG
     #aaaaaa  #313131 SEP
     
     
     And then, set color picker like this
     设置需要使用夜间模式的颜色，如下：
     下面是想让view的背景颜色有夜间模式，把backgroundColor改成dk_backgroundColorPicker，
     下面的我也看不懂：
     @property (nonatomic, copy) DKColorPicker dk_backgroundColorPicker;
     这个属性其实就是一个 block，它接收参数 DKThemeVersion *themeVersion，但是会返回一个 UIColor *：
     
     在第一次传入 picker 或者每次主题改变时，都会将当前主题 DKThemeVersion 传入 picker 并执行，然后，将得到的 UIColor 赋值给对应的属性 backgroundColor 更新视图颜色。
     typedef UIColor *(^DKColorPicker)(DKThemeVersion *themeVersion);
     比如下面使用 DKColorPickerWithRGB 创建一个临时的 DKColorPicker：
     
     在 DKThemeVersionNormal 时返回 0xffffff
     在 DKThemeVersionNight 时返回 0x343434
     在自定义的主题下返回 0xfafafa （这里的顺序与色表中主题的顺序有关）
     cell.dk_backgroundColorPicker = DKColorPickerWithRGB(0xffffff, 0x343434, 0xfafafa);
     同时，每一个对象还持有一个 pickers 数组，来存储自己的全部 DKColorPicker：
     self.view.dk_backgroundColorPicker = DKColorPickerWithKey(BG);
     After the current theme version change to DKThemeVersionNight, the view background color will switch to #343434.
     
     [DKNightVersionManager nightFalling];
     or
     
     DKNightVersionManager *manager = [DKNightVersionManager sharedInstance];
     manager.themeVersion = DKThemeVersionNormal;
     
     */
    
//    [kNotificationCenter addObserver:self selector:@selector(setupDataSource) name:NotiLogin object:nil];
    
//    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(login)];
//    [self.profileView addGestureRecognizer:tap];
}

- (void)setupSubviews {
    self.avatarImage.layer.cornerRadius = 18;
    self.tableView.bounces = NO;
    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    self.tableView.backgroundColor = MMColor(26, 31, 36);
    self.tableView.rowHeight = 36;
    self.dayNightButton.selected = [[MMAppSettings sharedSettings] isNightMood];
    /*与上一个版本实现上的不同，在 2.0 中删除了全部的 nightBackgroundColor，使用一个名为 dk_backgroundColorPicker 的属性取代它。
     
     @property (nonatomic, copy) DKColorPicker dk_backgroundColorPicker;
     这个属性其实就是一个 block，它接收参数 DKThemeVersion *themeVersion，但是会返回一个 UIColor *：
     
     在第一次传入 picker 或者每次主题改变时，都会将当前主题 DKThemeVersion 传入 picker 并执行，然后，将得到的 UIColor 赋值给对应的属性 backgroundColor 更新视图颜色。
     typedef UIColor *(^DKColorPicker)(DKThemeVersion *themeVersion);
     比如下面使用 DKColorPickerWithRGB 创建一个临时的 DKColorPicker：
     
     在 DKThemeVersionNormal 时返回 0xffffff
     在 DKThemeVersionNight 时返回 0x343434
     在自定义的主题下返回 0xfafafa （这里的顺序与色表中主题的顺序有关）
     cell.dk_backgroundColorPicker = DKColorPickerWithRGB(0xffffff, 0x343434, 0xfafafa);
     同时，每一个对象还持有一个 pickers 数组，来存储自己的全部 DKColorPicker：
     
     @interface NSObject ()
     
     @property (nonatomic, strong) NSMutableDictionary<NSString *, DKColorPicker> *pickers;
     
     @end
     在第一次使用这个属性时，当前对象注册为 DKNightVersionThemeChangingNotificaiton 通知的观察者。
     
     在每次收到通知时，都会调用 night_update 方法，将当前主题传入 DKColorPicker，并再次执行，并将结果传入对应的属性 [self performSelector:sel withObject:result]。
     
     - (void)night_updateColor {
     [self.pickers enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull selector, DKColorPicker  _Nonnull picker, BOOL * _Nonnull stop) {
     SEL sel = NSSelectorFromString(selector);
     id result = picker(self.dk_manager.themeVersion);
     [UIView animateWithDuration:DKNightVersionAnimationDuration
     animations:^{
     #pragma clang diagnostic push
     #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
     [self performSelector:sel withObject:result];
     #pragma clang diagnostic pop
     }];
     }];
     }
     也就是说，在每次改变主题的时候，都会发出通知。
     
     文／Draveness（简书作者）
     原文链接：http://www.jianshu.com/p/c31e25576201
     著作权归作者所有，转载请联系作者获得授权，并标注“简书作者”。*/
    if ([[MMAppSettings sharedSettings] isNightMood]) {
        self.dk_manager.themeVersion = DKThemeVersionNight;
    }else{
        self.dk_manager.themeVersion = DKThemeVersionNormal;
    }
 }
- (IBAction)dayNightButtonClicked:(UIButton *)sender {
    sender.selected = !sender.selected;
    [MMAppSettings sharedSettings].nightMood = ![MMAppSettings sharedSettings].nightMood;
    if ([self.dk_manager.themeVersion isEqualToString:DKThemeVersionNight]) {
        [self.dk_manager dawnComing];
    } else {
        [self.dk_manager nightFalling];
    }
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.view.width = 180;
    // 更新头像状态
//    [self.avatarImage sd_setImageWithURL:[NSURL URLWithString:kAccount.avatar]];
//    self.nameLabel.text = kAccount.name;
//    White_StatusBar;
}

- (void)dealloc {
    [kNotificationCenter removeObserver:self];
}

#pragma mark event handler
//- (IBAction)login {
//    SYAccount *account = [SYAccount sharedAccount];
//    if (account.isLogin) {
//        SYProfileController *pc = [[SYProfileController alloc] init];
//        [self presentViewController:pc animated:YES completion:nil];
//    } else {
//        SYLoginController *lvc = [[SYLoginController alloc] init];
//        
//        [self presentViewController:lvc animated:YES completion:nil];
//    }
//}
#pragma mark - 重要
//抽屉的主流框架（第一次编程比赛江哥讲过），右边的控制器可以是tarBarController,把他的tarbar隐藏，把显示在SYLeftDrawerController的tableview当作tarbar，点击cell的时候通知右边的控制器更改view。
//没有使用主流框架的原因，显示在SYLeftDrawerController的tableview的数据源不是死数据，需要从服务器加载。tarBarController需要SYLeftDrawerController去告诉它创建多少个对应的子控制器，比较麻烦
//这里采取了第三方框架RESideMenu，让主控制器称为框架的子类。点击SYLeftDrawerController的tableview的cell后，通过代理通知主控制器，主控制器发送setContentViewController消息，改变右边的view
- (void)setupDataSource {
    AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
    [mgr GET:@"http://news-at.zhihu.com/api/4/themes" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary*  _Nullable responseObject) {
        self.themes = [SYTheme mj_objectArrayWithKeyValuesArray:responseObject[@"others"]];
        SYTheme *home = [[SYTheme alloc] init];
        home.name = @"首页";
        [self.themes insertObject:home atIndex:0];
        dispatch_async(dispatch_get_main_queue(), ^{
            [self.tableView reloadData];
        });
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"%@",error);
    }];
}



//- (NSInteger)locateTheme:(SYTheme *)theme {
//    for (NSUInteger i = 0; i < self.dataSource.count; i++) {
//        if (self.dataSource[i].id == theme.id) {
//            return i;
//        }
//    }
//    return -1;
//}



//- (IBAction)didClickedMenuButton:(UIButton *)sender {
//    if ([sender.currentTitle isEqualToString:@"设置"]) {
//        SYSettingController *sc = [[SYSettingController alloc] init];
//        SYNavigationController *navi = [[SYNavigationController alloc] initWithRootViewController:sc];
//        navi.navigationBar.hidden = YES;
//        [self.mainController setCenterViewController:navi withCloseAnimation:YES completion:nil];
//        return;
//    } else {
//        SYCollectionController *cc = [[SYCollectionController alloc] init];;
//        
//        SYNavigationController *navi = [[SYNavigationController alloc] initWithRootViewController:cc];
//        navi.navigationBar.hidden = YES;
//        [self.mainController setCenterViewController:navi withCloseAnimation:YES completion:nil];
//    }
//}


#pragma mark tableView Delegate
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.themes.count;
}
- (SYLeftDrawerCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    SYLeftDrawerCell *cell = [SYLeftDrawerCell cellWithTableView:tableView];
    cell.theme = self.themes[indexPath.row];
    return cell;
}

//- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
//    return YES;
//}
//
//- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {
//
//    SYTheme *theme = self.dataSource[sourceIndexPath.row];
//    [self.dataSource removeObjectAtIndex:sourceIndexPath.row];
//    if (destinationIndexPath.row == 1) {
//        [self.dataSource insertObject:theme atIndex:1];
//    } else {
//        [self.dataSource addObject:theme];
//    }
//
//}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//    if (indexPath.row == 0) {
//        [self.mainController setCenterViewController:self.naviHome withCloseAnimation:YES completion:nil];
//    } else {
//        self.themeController.theme = self.dataSource[indexPath.row];
//        [self.mainController setCenterViewController:self.naviTheme withCloseAnimation:YES completion:nil];
//    }
    SYTheme *theme = self.themes[indexPath.row];
    if ([self.delegate respondsToSelector:@selector(LeftDrawerController:menuButtonClicked:)]) {
        [self.delegate LeftDrawerController:self menuButtonClicked:theme];
    }
}

#pragma mark cell delegate
//- (void)didClickedLeftDrawerCell:(SYLeftDrawerCell *)cell {
//    SYTheme *theme = cell.theme;
//    NSInteger locate =  [self locateTheme:theme];
//    if (locate < 0) return;
//    cell.theme.isCollected = YES;
//    
//    NSIndexPath *sip = [NSIndexPath indexPathForRow:locate inSection:0];
//    NSIndexPath *dip = [NSIndexPath indexPathForRow:1 inSection:0];
//    [self.tableView moveRowAtIndexPath:sip toIndexPath:dip];
//    [self tableView:self.tableView moveRowAtIndexPath:sip toIndexPath:dip];
//    
//}


#pragma mark theme controller delegate

//- (void)themeController:(SYThemeController *)themeController theme:(SYTheme*)theme actionType:(SYThemeActionType)type {
//    NSInteger locate =  [self locateTheme:theme];
//    if (locate < 0) return;
//    theme.isCollected = type;
//    
//    NSIndexPath *sip = nil;
//    NSIndexPath *dip = nil;
//    
//    if (type == SYThemeActionTypeCollect) {
//        [SYZhihuTool collectedWithTheme:theme];
//        
//        sip = [NSIndexPath indexPathForRow:locate inSection:0];
//        dip = [NSIndexPath indexPathForRow:1 inSection:0];
//    } else {
//        [SYZhihuTool cancelCollectedWithTheme:theme];
//        sip = [NSIndexPath indexPathForRow:locate inSection:0];
//        dip = [NSIndexPath indexPathForRow:self.dataSource.count-1 inSection:0];
//    }
//    // 重新设置theme，刷新cell的显示
//    SYLeftDrawerCell *cell = [self.tableView cellForRowAtIndexPath:sip];
//    cell.theme = theme;
//    [self.tableView moveRowAtIndexPath:sip toIndexPath:dip];
//    [self tableView:self.tableView moveRowAtIndexPath:sip toIndexPath:dip];
//    
//}

#pragma mark setter & getter
//- (MMNavigationController *)naviHome {
//    if (!_naviHome) {
//        MMHomeController *home = [[MMHomeController alloc] init];
//        _naviHome = [[MMNavigationController alloc] initWithRootViewController:home];
////        _naviHome.navigationBar.hidden = YES;
//    }
//    return _naviHome;
//}

//- (SYNavigationController *)naviTheme {
//    if (!_naviTheme) {
//        _naviTheme = [[MMNavigationController alloc] initWithRootViewController:self.themeController];
//        _naviTheme.navigationBar.hidden = YES;
//    }
//    return _naviTheme;
//}

//- (SYThemeController *)themeController {
//    if (!_themeController) {
//        _themeController = [[SYThemeController alloc] init];
//        _themeController.view.backgroundColor = [UIColor whiteColor];
//        _themeController.delegate = self;
//    }
//    return _themeController;
//}



@end
